package com.excilys.training.ebanking.web.security;

import java.util.ArrayList;
import java.util.List;

import org.excilys.training.ebanking.iservice.IServiceUtilisateur;
import org.excilys.training.ebanking.model.Autorisation;
import org.excilys.training.ebanking.model.Utilisateur;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

public class UtilisateurPersonnaliseService implements UserDetailsService {

	@Autowired
	IServiceUtilisateur serviceUtilisateur;

	public UserDetails loadUserByUsername(String username)
			throws UsernameNotFoundException, DataAccessException {
		Utilisateur utilisateur = serviceUtilisateur.getUtilisateurByLoginFetchAutorisation(username);
		if (utilisateur == null) {
			throw new UsernameNotFoundException("Utilisateur introuvable");
		}

		List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();

		for (Autorisation autorisation : utilisateur.getRoles()) {
			authorities.add(new GrantedAuthorityImpl(autorisation.getRole()));
		}

		UtilisateurPersonnalise utilisateurperso = new UtilisateurPersonnalise(
				utilisateur.getId(), utilisateur.getNom(),
				utilisateur.getPassword(), true, true, true, true, authorities);
		return utilisateurperso;
	}

}
